/**
*\file traitement.c
*\author H4201
*/

/*MODULES USED*/
#include "traitement.h"

#include "../../rt_ciai/interface/partage_simu.h"

/**
	* envois une pièces toute les cadence_piece secondes.
	* il y a une probabilité pourcentage_rebut d'envoyer une pièce avec une taille aléatoire.
	* si rebut_oblige > 0, alors une pièce de taille aléatoire est envoyée.
	*\param parameter parametre inutilisé
*/
void* traitement(void *parameter) {

	while( !arret_demande) {
		usleep(1000000/cadence_piece);
	
		if (g_shm->clapet) {
			int dimension_envoyee;
			if (rebut_oblige) {
				pthread_mutex_lock(&mtx_rebut_oblige);
				rebut_oblige--;
				pthread_mutex_unlock(&mtx_rebut_oblige);
				dimension_envoyee = rand();
			} else if (rand_a_b(0, 100) < pourcentage_rebut) {
				dimension_envoyee = rand();
			} else {
				dimension_envoyee = dimensions[produit_courant];
			}

			g_shm->dim = dimension_envoyee;
			printf("envoi %d\n", dimension_envoyee);

			//prévenir de l'envoi d'une pièce
			if (pid_application != 0) {
				kill(pid_application, SIGUSR1); 
			}
		}
		
	}


	return NULL;

}

/**
	* retourne une valeur aléatoire entre a et b
*/
int rand_a_b(int a, int b){
    return rand()%(b-a) +a;
}
